package com.study.chunguard.common.enums;

import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 用户类型;0-超级管理员 1-部门管理员 2-普通用户
 *
 * @author zhaowenhao
 * @since 2023-05-21
 */
public enum UserTypeEnum {
    /**
     * 超级管理员
     */
    SUPER_ADMIN("0", "超级管理员"),

    /**
     * 部门管理员
     */
    ORG_ADMIN("1", "管理员"),

    /**
     * 普通用户
     */
    NORMAL_USER("2", "普通用户");

    /**
     * 代码
     */
    private final String code;

    /**
     * 名称
     */
    private final String name;

    private static final Map<String, UserTypeEnum> CODE_TO_ENUM = Arrays.stream(UserTypeEnum.values())
            .collect(Collectors.toMap(UserTypeEnum::getCode, Function.identity()));

    private static final Map<String, UserTypeEnum> NAME_TO_ENUM = Arrays.stream(UserTypeEnum.values())
            .collect(Collectors.toMap(UserTypeEnum::getName, Function.identity()));

    UserTypeEnum(String code, String name) {
        this.code = code;
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    public static UserTypeEnum of(String code) {
        return Optional.ofNullable(CODE_TO_ENUM.get(code))
                .orElseThrow(() -> new IllegalArgumentException("用户类型错误"));
    }

    public static String getCodeByName(String name) {
        return Optional.ofNullable(NAME_TO_ENUM.get(name))
                .map(UserTypeEnum::getCode)
                .orElseThrow(() -> new IllegalArgumentException("用户类型错误"));
    }
}
